package ru.compft.web.controller;

import ru.compft.common.data.Module;
import ru.compft.common.data.ModulePage;
import ru.compft.common.utils.GlobalConstants;
import ru.compft.web.WebConst;
import ru.compft.web.beans.BreadCrumb;
import ru.compft.web.utils.FacesUtils;
import ru.compft.web.view.ModuleView;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;

/**
 * User: VVasiliev
 * Date: 07.06.12
 * Time: 18:02
 * Контроллер отвечающий за формирование меню типа BreadCrumbs
 */
@ManagedBean(name = WebConst.BREAD_CRUMBS)
@ViewScoped
public class BreadCrumbsController implements Serializable {
    private static final long serialVersionUID = 629855113208226817L;

    /**
     * Получаем коллекцию viewId, каждая их которой является ссылкой на конкретный модуль (его URL pattern)
     *
     * @return
     */
    public List<BreadCrumb> getFullPath() {
        final List<BreadCrumb> result = new LinkedList<BreadCrumb>();

        final ModuleView moduleViewBean = (ModuleView) FacesUtils.getBackingBean(WebConst.MODULE_VIEW);
        if (moduleViewBean != null) {
            final Module currentModule = moduleViewBean.getCurrentModule();
            if (currentModule != null) {
                // добавим модуль
                BreadCrumb breadCrumb = new BreadCrumb();
                breadCrumb.setName(currentModule.getName());
                breadCrumb.setPath(GlobalConstants.MODULES + GlobalConstants.SLASH + currentModule.getCode() + GlobalConstants.INDEX);

                result.add(breadCrumb);

                final ModulePage currentModulePage = moduleViewBean.getCurrentModulePage();
                if (currentModulePage != null) {
                    // добавим страницу
                    breadCrumb = new BreadCrumb();
                    breadCrumb.setName(currentModulePage.getName());
                    breadCrumb.setPath(currentModulePage.getCode());

                    result.add(breadCrumb);
                }
            }
        }
//        System.out.println("=== BreadCrumb getFullPath " + result + " date " + new Date());
        return result;
    }
}
